import router from '@/router'
import store from '@/store'
import axios from 'axios'
import { Toast } from 'vant'
import JsonBig from 'json-bigint'
const URL = 'http://toutiao-app.itheima.net'
// const URL = 'http://localhost:8000'
const request = axios.create({
  baseURL: URL,
  timeout: 3000,
  transformResponse: [
    function(data) {
      // 对 data 进行任意转换处理  data是原始的json数据
      try {
        return JsonBig.parse(data)
      } catch {
        return data
      }
    }
  ]
})
// 配置拦截器
// 添加请求拦截器
request.interceptors.request.use(
  function(config) {
    // 在发送请求之前做些什么
    const token = store.state.user.token.token
    if (token) {
      config.headers.Authorization = 'Bearer ' + token
    }
    return config
  },
  function(error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)
function goLogin() {
  store.commit('user/removeToken')
  router.push({
    path: '/login',
    query: {
      back: router.currentRoute.path
    }
  })
  Toast.fail('登录信息失效')
}

// 添加响应拦截器
// request.interceptors.response.use(
//   function(response) {
//     // 对响应数据做点什么

//     return response.data
//   },
//   async function(error) {
//     if (error.response.status === 401) {
//       const objToken = store.state.user.token
//       if (!objToken.refresh_token) {
//         goLogin()
//       }
//       try {
//         const res = await axios({
//           method: 'put',
//           url: URL + '/v1_0/authorizations',
//           headers: {
//             Authorization: 'Bearer ' + objToken.refresh_token
//           }
//         })
//         console.log(res)
//         store.commit('user/setToken', {
//           token: res.data.data.token,
//           refresh_token: objToken.refresh_token
//         })
//         return request({
//           method: error.config.method,
//           url: error.config.url
//         })
//       } catch {
//         goLogin()
//       }
//     } else {
//       return Promise.reject(error)
//     }
//   }
// )
request.interceptors.response.use(
  function(response) {
    // 对响应数据做点什么

    return response.data
  },
  async function(error) {
    if (error.response.status === 401) {
      const objtoken = store.state.user.token
      if (!objtoken.refresh_token) {
        goLogin()
      }
      try {
        const res = await axios({
          method: 'PUT',
          url: URL + '/v1_0/authorizations',
          headers: {
            Authorization: 'Bearer ' + objtoken.refresh_token
          }
        })
        store.commit('user/setToken', {
          token: res.data.data.token,
          refresh_token: objtoken.refresh_token
        })
        return request({
          method: error.config.method,
          url: error.config.url
        })
      } catch {
        goLogin()
      }
    } else {
      return Promise.reject(error)
    }
  }
)
export default request
